Yep, this column returns NULL. One method is to use SQL Server profiler to insert the captured data to the table directly...
or by using even klass to identify an ALTER opration
use A
CREATE TABLE TEST (c int)
ALTER TABLE TEST
ADD NAME3 VARCHAR(50)
begin try declare @enable int
-- Check to find out if Default Server Side traces are running
select top 1 @enable = convert(int,value_in_use)
from sys.configurations where name = 'default trace enabled' if @enable = 1
--default trace is enabled
begin declare @d1 datetime; declare @diff int;
declare @curr_tracefilename varchar(500);
declare @base_tracefilename varchar(500);
declare @indx int ;
declare @temp_trace table (txt varchar(100),obj_name nvarchar(256) collate database_default, database_name nvarchar(256) collate database_default , start_time datetime, event_class int, event_subclass int, object_type int, server_name nvarchar(256) collate
database_default , login_name nvarchar(256) collate database_default, application_name nvarchar(256) collate database_default, ddl_operation nvarchar(40) collate database_default );
select @curr_tracefilename = path from sys.traces where is_default = 1 ;
set @curr_tracefilename = reverse(@curr_tracefilename)
select @indx = PATINDEX('%\%', @curr_tracefilename)
set @curr_tracefilename = reverse(@curr_tracefilename)
set @base_tracefilename = LEFT( @curr_tracefilename,len(@curr_tracefilename) - @indx) + '\log.trc';
insert into @temp_trace select TextData,ObjectName,
DatabaseName, StartTime, EventClass, EventSubClass,
ObjectType, ServerName, LoginName, ApplicationName,
'temp' from ::fn_trace_gettable( @base_tracefilename, default )
where EventClass in (164) and EventSubclass = 0 and DatabaseID <> 2 /*
Event ID 164: Object:Altered If you need to
track one particular event then you can modify the filters
above To track only Object:
Deleted Events, the WHERE clause would be: where EventClass in (47)
and EventSubclass = 0 and DatabaseID <> 2 */
update @temp_trace set ddl_operation = 'ALTER'
where event_class = 164 select @d1 = min(start_time)
from @temp_trace set @diff= datediff(hh,@d1,getdate())
set @diff=@diff/24; select @diff as difference, @d1 as date,
object_type as obj_type_desc , * from @temp_trace where object_type
not in (21587) order by start_time desc /* The object type decides
what type of object is being modified. Let's say
we wanted to find out only DROP DATABASE events, then we
can add an additional filter as follows to the above
SELECT statement: and object_type = 16964 -- This is a database */
end else begin print 'Default server side traces not enabled'
end end try begin catch select -100 as difference, ERROR_NUMBER() as date,
ERROR_SEVERITY() as obj_type_desc, ERROR_STATE() as obj_name, ERROR_MESSAGE() as database_name, 1 as start_time,
1 as event_class, 1 as event_subclass, 1 as object_type,
1 as server_name, 1 as login_name, 1 as application_name, 1 as ddl_operation
end catch